#pragma once
#include "basealgorithm.h"
#include "common.h"



class AES : public BaseAlgorithm
{
public:
	AES(
		key_t key,
		unsigned int Nr,
		unsigned int Nk);
	~AES();

	cipher_t cipher(const plaintext_t& plaintext);
	plaintext_t decipher(const cipher_t& ciphertext);

	void round(
		int round_count,
		void* state,
		const key_t& round_key);
	void inverse_round(
		int round_count,
		void* state,
		const key_t& round_key);

	void key_schedule();


private:
	aes_state_t state;
};

